package exo3;

import java.awt.Color;
import java.awt.Graphics;

public class EkSol extends Ek
{
    private static final long serialVersionUID = 1L;
    
    /// Nombre de branches
    private static final int BRANCHES_COUNT = 5;
    /// Ratio de réduction entre chaque itération
    private static final double REDUCTION_RATIO = 3;
    
    /// Angle entre deux branches
    private static final double ANGLE = 360 / BRANCHES_COUNT;
    
    /// Couleurs des branches
    private static final Color[] colors = {Color.red, Color.cyan, Color.green};

    public EkSol (int prof)
    {
        super(prof);
    }
    
    /**
     * Fonction drawEk : Dessine Ek de manière récursive
     * @param x      Abscisse du point de l'extrémité
     * @param y      Ordonnée du point de l'extrémité
     * @param l      Longueur des branches
     * @param offset Angle de décalage éventuel des branches
     * @param k      Profondeur de récurrence
     * @param g      Zone graphique
     */
    @Override
    public void drawEk (int x, int y, double l, double offset, int k,
                        Graphics g)
    {
        // Cas particulier de fin de récurrence
        if (k <= 0) return;
        
        // Change color
        g.setColor(colors[k%colors.length]);
        
        // New points
        int [][] points = new int[BRANCHES_COUNT][2];
        
        // Trace les branches
        for (int b = 0; b < BRANCHES_COUNT; b++)
        {
            double angle = (offset + b*ANGLE)/180 * Math.PI;
            points[b][0] = (int)(x + l * Math.cos(angle));
            points[b][1] = (int)(y - l * Math.sin(angle));
            
            g.drawLine(x, y, points[b][0], points[b][1]);
        }
        
        // Appel récursif
        for (int b = 0; b < BRANCHES_COUNT; b++)
            drawEk(points[b][0], points[b][1], l/REDUCTION_RATIO, offset, k-1, g);
    }
}
